// hexUtils.js
/**
 * 将16进制字符串转换为普通字符串
 * @param {string} hexStr 16进制字符串，例如 "48656c6c6f20756e6970617070"
 * @returns {string} 转换后的普通字符串，例如 "Hello uniapp"
 */
export function hexToString(hexStr) {
	if (!hexStr) return '';

	// 去掉空格
	hexStr = hexStr.replace(/\s+/g, '');

	// 校验长度是否为偶数
	if (hexStr.length % 2 !== 0) {
		console.warn("16进制字符串长度不是偶数，可能不完整");
	}

	let result = '';
	for (let i = 0; i < hexStr.length; i += 2) {
		const hexPair = hexStr.substr(i, 2);
		const charCode = parseInt(hexPair, 16);
		result += String.fromCharCode(charCode);
	}
	return result;
}
/**
 * 将十六进制字符串转换为可读字符串
 * @param {String} hexStr - 十六进制字符串（不带0x）
 * @returns {String} - 转换后的字符串
 */
export function hexString(hexStr) {
	// 去除空格和可能的0x
	hexStr = hexStr.replace(/\s|0x/g, '');
	let result = '';
	for (let i = 0; i < hexStr.length; i += 2) {
		result += String.fromCharCode(parseInt(hexStr.substr(i, 2), 16));
	}
	return result;
}

/**
 * 从蓝牙接收的HEX消息中提取主要英文状态行
 * @param {String} hexStr - 蓝牙返回的十六进制字符串
 * @returns {String} - 提取后的主状态行（如 "Configuration xGM starts !"）
 */
export function extractMainStatus(hexStr) {
	// 1. 转成普通字符串
	const decoded = hexString(hexStr);

	// 2. 按换行符分割，只取第一行
	const firstLine = decoded.split(/[\r\n]+/)[0];

	// 3. 去掉首尾空格
	return firstLine.trim();
}
export function strToHexArray(str) {
	// 在字符串末尾加上回车换行符
	str += '\r\n';
	// 把每个字符转成十六进制字符串
	return Array.from(str).map(ch => {
		return '0x' + ch.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0');
	});
}